package de.fhl.model;

/**
 * Ueberschrift:  OnlineWahl
 * Copyright:     Copyright (c) 2010 
 * Organisation:  FH Luebeck - Virtuelle FH
 */

import java.io.IOException;

/**
 * Dase WaehlerState Interface ist Teil des Statusmodells des Waehlers<br>
 * 
 * es beinhaltet die Implementierungen der Status Klassen
 * Die Status Methode hat eine Referenz auf das Context Objekt und hat die Moeglichkeit ihren Status zu aendern.
 * 
 * @author Achim Krumrein (krumreia@stud.fh-luebeck.de)
 * @author Thomas Weber (webertho@googlemail.de)
 * @version 1.0
 */
public interface WaehlerState {
		public void changeState(WaehlerStateContext stateContext, String name);
	} 

   	/** 
   	 * Status Keine Berechtigung 
   	 */  
	class KeineBerechtigung implements WaehlerState { 
		public void changeState(WaehlerStateContext stateContext, String Name) { 
			System.out.println(Name + " Statuswechsel:");
			System.out.println(" KeineBerechtigung->Berechtigt");
			
			// TODO: State in Datenbank schreiben
			
			// State an WaehlerVerzeichnis rückmelden
			SocketClient sc = new SocketClient();
			try {
				sc.sendState(Name, "Berechtigt");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			stateContext.setState(new Berechtigt()); 
		}
	}

   	/** 
   	 * Status Berechtigt 
   	 */  
	class Berechtigt implements WaehlerState { 
		public void changeState(WaehlerStateContext stateContext, String Name) { 
			System.out.println(Name + " Statuswechsel:");
			System.out.println(" Berechtigt->WahlOffen");	
			
			// TODO: State in Datenbank schreiben

			// State an WaehlerVerzeichnis rückmelden
			SocketClient sc = new SocketClient();
			try {
				sc.sendState(Name, "WahlOffen");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			stateContext.setState(new WahlOffen()); 
		} 
	} 

   	/** 
   	 * Status WahlOffen 
   	 */  
	class WahlOffen implements WaehlerState { 
		public void changeState(WaehlerStateContext stateContext, String Name) { 
			System.out.println(Name + " Statuswechsel:");
			System.out.println(" WahlOffen->Gewaehlt");
			
			// TODO: State in Datenbank schreiben

			// State an WaehlerVerzeichnis rückmelden
			SocketClient sc = new SocketClient();
			try {
				sc.sendState(Name, "Gewaehlt");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			stateContext.setState(new Gewaehlt()); 
		} 
	} 
	
	
   	/** 
   	 * Status Gewaehlt 
   	 */  
	class Gewaehlt implements WaehlerState { 
		public void changeState(WaehlerStateContext stateContext, String Name){ 
			System.out.println(Name + " Statuswechsel:"); 
			System.out.println(" Gewaehlt.fertig-aus");
			
			// TODO: State in Datenbank schreiben
			
		}
	}

	 

